const Koa = require('koa');
const path = require('path');
// 安全头
const helmet = require('koa-helmet');
// 静态资源的服务
const koaStatic = require('koa-static');
// 路由
const router = require('./routes');
// 功能齐全的koa正文解析器中间件。支持multipart，urlencoded和json请求机构。提供与Express的bodyParser-相同的功能multer。
const koaBody = require('koa-body');
// JSON精美打印的响应中间件。还将节点对象流转换为二进制。
const koaJson = require('koa-json');
// KOA的跨域资源共享（CORS）
const koaCors = require('@koa/cors');
// 整合 KOA 的中间件
const koaCompose = require('koa-compose');
// 压缩Koa中间件
const koaCompress = require('koa-compress');
const errorHandle = require('../common/ErrorHandle');

const app = new Koa();
const isDevMode = (process.env.NODE_ENV === 'production' ? false : true);

const middleware = koaCompose([
  koaBody(),
  // koaStatic( path.join( __dirname, './bootcss' ) ),
  koaStatic(path.resolve('../')),
  koaCors({
    // origin: 'http://cxvh.cc:123456'
    'Access-Control-Allow-Origin': '*.cxvh.com,*.cxvh.cn,*.cxvh.cc,*.allapi.cc',
  }),
  koaJson({ pretty: false, param: 'pretty' }),
  helmet(),
  errorHandle
]);
!isDevMode && app.use(koaCompress({
  filter(content_type) {
    return /text/i.test(content_type);
  },
  threshold: 2048,
  gzip: {
    flush: require('zlib').constants.Z_SYNC_FLUSH,
  },
  deflate: {
    flush: require('zlib').constants.Z_SYNC_FLUSH,
  },
  br: false, // disable brotli
}));
app.use(middleware);
app.use(router());
app.listen(81);